package main

import (
	"fmt"
	"math/rand"
	"time"

	"gitee.com/MM-Q/ltmgr"
)

func main() {
	// 创建一个任务管理器，初始容量为5
	tm, err := ltmgr.NewLtMgr(5)
	if err != nil {
		fmt.Println(err)
		return
	}
	tm.EnablePrint = false

	// 添加任务1
	tm.AddTasks(app1, 110, 1, 3)

	// 添加任务2
	tm.AddTasks(app2, 120, 1, 120, 5)

	// 添加任务3（可能失败的任务）
	tm.AddTasks(app3, 130, 6, 130, 5)

	// 启动任务管理器
	tm.Run()
}

// app1 是一个模拟应用程序的函数，输出任务执行的进度
func app1(taskID int) {
	fmt.Printf("任务 %d (app1) 开始执行...\n", taskID)

	// 模拟多步骤的执行逻辑
	for i := 1; i <= 5; i++ {
		fmt.Printf("任务 %d (app1) 正在执行第 %d 步...\n", taskID, i)
		time.Sleep(time.Duration(rand.Intn(500)+500) * time.Millisecond) // 模拟随机执行时间
	}

	fmt.Printf("任务 %d (app1) 执行完成!\n", taskID)
}

// app2 是一个模拟应用程序的函数，接收多个参数并输出结果
func app2(taskID int, arg1 int) error {
	fmt.Printf("任务 %d (app2) 开始执行，输入参数: %d...\n", taskID, arg1)

	// 模拟数学计算
	result := arg1 * 2
	fmt.Printf("任务 %d (app2) 计算结果: %d...\n", taskID, result)

	// 模拟任务执行时间
	time.Sleep(time.Duration(rand.Intn(3)+1) * time.Second) // 1-3秒的随机执行时间

	fmt.Printf("任务 %d (app2) 执行完成!\n", taskID)
	return nil
}

// app3 是一个可能失败的任务
func app3(taskID int, arg1 int) error {
	fmt.Printf("任务 %d (app3) 开始执行，输入参数: %d...\n", taskID, arg1)

	// 模拟任务失败概率（30% 失败）
	if rand.Float64() < 0.3 {
		fmt.Printf("任务 %d (app3) 执行失败!\n", taskID)
		return fmt.Errorf("任务 %d (app3) 失败", taskID)
	}

	// 模拟任务成功
	fmt.Printf("任务 %d (app3) 执行完成!\n", taskID)
	return nil
}
